home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / share / snmp / mib2c-data / mfd-top.m2c < prev    next >
Text File  |  2008-09-22  |  18KB  |  606 lines

  1. #############################################################  -*- c -*-
  2. ## generic include for XXX. Do not use directly.
  3. ## $Id: mfd-top.m2c 14170 2006-01-26 17:02:48Z dts12 $
  4. ########################################################################
  5. ########################################################################
  6. ##
  7. ## mfd function params
  8. ##
  9. @ifconf ${name}.m2d@
  10. @   include ${name}.m2d@
  11. @end@
  12. ##
  13. ## set up defaults
  14. ##
  15. @foreach $table table@
  16. @    include default-mfd-top.m2c@ # get defaults
  17. @    eval $context = $table@
  18. ##
  19. ##   set up defaults
  20. ##
  21. @    print Defaults for $table...@
  22. @    eval $m2c_context_reg = "$mfd_default_context_reg"@
  23. @    eval $m2c_data_allocate = $mfd_default_data_allocate@
  24. @    eval $m2c_data_cache = $mfd_default_data_cache@
  25. @    eval $m2c_data_context = "$mfd_default_data_context"@
  26. @    eval $m2c_data_init = $mfd_default_data_init@
  27. @    eval $m2c_data_transient = $mfd_default_data_transient@
  28. @    eval $m2c_include_examples = $mfd_default_include_examples@
  29. @    eval $m2c_irreversible_commit = 0@
  30. @    eval $m2c_table_access = "$mfd_default_table_access"@
  31. @    eval $m2c_table_dependencies = table_is_writable($context)@
  32. @    eval $m2c_table_persistent = 0@
  33. @    eval $m2c_table_row_creation = table_has_create($context)@
  34. @    eval $m2c_table_settable = table_is_writable($context)@
  35. @    eval $m2c_table_skip_mapping = -1@ # -1 = no default; based on type
  36. @    eval $m2c_table_sparse = 0@
  37. @    eval $mfd_generate_makefile = $mfd_default_generate_makefile@
  38. @    eval $mfd_generate_subagent = $mfd_default_generate_subagent@
  39. ##
  40. ##   allow for user override, or save defaults
  41. ##
  42. @    ifconf default-table-${context}.m2d@
  43. @       print Warning: using defaults in current directory. Consider moving@
  44. @       print them to $m2c_defaults_dir.@
  45. @       eval $m2c_defaults_dir = "default-"@
  46. @    end@
  47. @    ifconf ${m2c_defaults_dir}table-${context}.m2d@
  48. @      if $mfd_interactive_setup == 1@
  49. @        print There are existing defaults for $context (${m2c_defaults_dir}table-${context}.m2d).@
  50. @        prompt $ans r)econfigure or u)se existing [default=u] : @
  51. @        if "x$ans" eq "xr"@
  52. @          eval $mfd_interactive_setup = -1@ # already asked to overwrite
  53. @          run -again mfd-interactive-setup.m2c@
  54. @          eval $mfd_interactive_setup = 1@
  55. @        else@
  56. ##          ## read in old, write them back (this should add any new vars
  57. @           include ${m2c_defaults_dir}table-${context}.m2d@
  58. @           include m2c_table_save_defaults.m2i@
  59. @        end@ 
  60. @      end@
  61. @    else@ # no existing defaults
  62. @      ifdir defaults@
  63. ##       NOP
  64. @      else@
  65. @         perleval my $rc = mkdir(defaults,0775); return $rc != 1 @
  66. @      end@
  67. @      run mfd-interactive-setup.m2c@
  68. @    end@ # no conf file
  69. @end@ # foreach table
  70. @if $m2c_gen_table_defaults == 1@
  71. @   exit@
  72. @end@
  73. @print Starting MFD code generation...@
  74. ########################################################################
  75. @eval $m2c_processing_type = 'h'@
  76. @open ${name}.h@
  77. @eval $hack = "Id"@
  78. /*
  79.  * Note: this file originally auto-generated by mib2c using
  80.  *       version $Revision: 14170 $ of $RCSfile$
  81.  *
  82.  * $$hack:$
  83.  */
  84. @include generic-header-top.m2i@
  85.  
  86. /** @addtogroup misc misc: Miscellaneous routines
  87.  *
  88.  * @{
  89.  */
  90. @if $m2c_mark_boundary == 1@
  91. /** START header generated by $RCSfile$ $Revision: 14170 $ */
  92. @end@
  93. #include <net-snmp/library/asn1.h>
  94.  
  95. /* other required module components */
  96.     /* *INDENT-OFF*  */
  97. config_add_mib($name.module)
  98. config_require($name.module/${name}/${name}_interface)
  99. config_require($name.module/${name}/${name}_data_access)
  100. @if $m2c_create_fewer_files != 1@
  101. config_require($name.module/${name}/${name}_data_get)
  102. config_require($name.module/${name}/${name}_data_set)
  103.     /* *INDENT-ON*  */
  104.  
  105. /* OID and column number definitions for $context */
  106. #include "${name}_oids.h"
  107.  
  108. /* enum definions */
  109. #include "${name}_enums.h"
  110. @else@
  111.     /* *INDENT-ON*  */
  112.  
  113. /* OID, column number and enum definions for $context */
  114. #include "${name}_constants.h"
  115. @end@ // m2c_create_fewer_files
  116.  
  117. /* *********************************************************************
  118.  * function declarations
  119.  */
  120. void init_$name(void);
  121. void shutdown_$context(void);
  122.  
  123. /* *********************************************************************
  124.  * Table declarations
  125.  */
  126. @foreach $table table@
  127. @    include m2c_setup_table.m2i@
  128. @    include details-table.m2i@
  129. /* *********************************************************************
  130.  * When you register your mib, you get to provide a generic
  131.  * pointer that will be passed back to you for most of the
  132.  * functions calls.
  133.  *
  134.  * TODO:100:r: Review all context structures
  135.  */
  136.     /*
  137.      * TODO:101:o: |-> Review $context registration context.
  138.      */
  139. @    if "x$m2c_context_reg" eq "x"@
  140. @        eval $m2c_context_reg = "netsnmp_data_list"@
  141. @    end@
  142. typedef $m2c_context_reg ${context}_registration;
  143.  
  144. @    include generic-data-context.m2i@
  145.  
  146. @   if $m2c_table_settable@
  147. /* *********************************************************************
  148.  * TODO:115:o: |-> Review $context undo context.
  149.  * We're just going to use the same data structure for our
  150.  * undo_context. If you want to do something more efficent,
  151.  * define your typedef here.
  152.  */
  153. typedef ${context}_data ${context}_undo_data;
  154.  
  155. @    end@
  156. @    include generic-table-indexes.m2i@
  157.  
  158. /* *********************************************************************
  159.  * TODO:130:o: |-> Review $context Row request (rowreq) context.
  160.  * When your functions are called, you will be passed a
  161.  * ${context}_rowreq_ctx pointer.
  162.  */
  163. typedef struct ${context}_rowreq_ctx_s {
  164.  
  165.     /** this must be first for container compare to work */
  166.     netsnmp_index        oid_idx;
  167. ##                                             /* xxx-rks: shrink index oid_tmp? */
  168.     oid                  oid_tmp[MAX_${context}_IDX_LEN];
  169.     
  170.     ${context}_mib_index        tbl_idx;
  171.     
  172. @    if $m2c_data_allocate == 1@
  173. @        eval $mfd_tmp = "*"@
  174. @    else@
  175. @        eval $mfd_tmp = " "@
  176. @    end@
  177.     ${context}_data            $mfd_tmp data;
  178. @   if $m2c_table_sparse == 1@
  179.     unsigned int                column_exists_flags; /* flags for existence */
  180. @   end@
  181. @   if $m2c_table_settable@
  182. @      if $m2c_undo_embed == 1@
  183. @         eval $mfd_tmp = " "@
  184. @      else@
  185. @         eval $mfd_tmp = "*"@
  186. @      end@ # embed
  187.     ${context}_undo_data       $mfd_tmp undo;
  188.     unsigned int                column_set_flags; /* flags for set columns */
  189.  
  190. @   end@ # settable
  191.  
  192.     /*
  193.      * flags per row. Currently, the first (lower) 8 bits are reserved
  194.      * for the user. See mfd.h for other flags.
  195.      */
  196.     u_int                       rowreq_flags;
  197. @   if $m2c_table_refcounts == 1@
  198.     u_int                       ref_count;
  199. @   end@
  200.  
  201.     /*
  202.      * TODO:131:o: |   |-> Add useful data to $context rowreq context.
  203.      */
  204.     
  205.     /*
  206.      * storage for future expansion
  207.      */
  208.     netsnmp_data_list             *${context}_data_list;
  209.  
  210. } ${context}_rowreq_ctx;
  211.  
  212. typedef struct ${context}_ref_rowreq_ctx_s {
  213.     ${context}_rowreq_ctx *rowreq_ctx;
  214. } ${context}_ref_rowreq_ctx;
  215.  
  216. /* *********************************************************************
  217.  * function prototypes
  218.  */
  219. ## {
  220.     int ${context}_pre_request(${context}_registration * user_context);
  221.     int ${context}_post_request(${context}_registration * user_context,
  222.         int rc);
  223.  
  224. @   if $m2c_data_init == 1@
  225.     int ${context}_rowreq_ctx_init(${context}_rowreq_ctx *rowreq_ctx,
  226.                                    void *user_init_ctx);
  227.     void ${context}_rowreq_ctx_cleanup(${context}_rowreq_ctx *rowreq_ctx);
  228.  
  229. @   end@
  230. @    if "$m2c_data_context" ne "generated"@
  231. @        if ($m2c_data_allocate == 1) || ($m2c_undo_embed == 1)@
  232.     ${context}_data * ${context}_allocate_data(void);
  233.     void ${context}_release_data(${context}_data *data);
  234.  
  235. @        end@
  236. @   end@
  237. @   if $m2c_table_settable@
  238. @      if $m2c_table_dependencies == 1@
  239.     int ${context}_check_dependencies(${context}_rowreq_ctx * rowreq_ctx); 
  240. @      end@ 
  241.     int ${context}_commit(${context}_rowreq_ctx * rowreq_ctx);
  242. @      if $m2c_irreversible_commit == 1@
  243.     int ${context}_irreversible_commit(${context}_rowreq_ctx * rowreq_ctx);
  244. @      end@
  245. @   end@ # writable
  246.  
  247.     ${context}_rowreq_ctx *
  248.                   ${context}_row_find_by_mib_index(${context}_mib_index *mib_idx);
  249.  
  250. @   if $m2c_table_refcounts == 1@
  251. int ${context}_row_ref_increment(${context}_rowreq_ctx *rowreq_ctx);
  252. int ${context}_row_ref_decrement(${context}_rowreq_ctx *rowreq_ctx);
  253.  
  254. @   end@
  255. extern oid ${context}_oid[];
  256. extern int ${context}_oid_size;
  257.  
  258. @end@ # for each
  259.  
  260. #include "${name}_interface.h"
  261. #include "${name}_data_access.h"
  262. @if $m2c_create_fewer_files != 1@
  263. #include "${name}_data_get.h"
  264. #include "${name}_data_set.h"
  265. @else@
  266. @   eval $mfd_processing_types = "h"@
  267. @   include mfd-data-get.m2c@
  268. @   include mfd-data-set.m2c@
  269. @end@ // m2c_create_fewer_files
  270.  
  271. /*
  272.  * DUMMY markers, ignore
  273.  *
  274.  * TODO:099:x: *************************************************************
  275.  * TODO:199:x: *************************************************************
  276.  * TODO:299:x: *************************************************************
  277.  * TODO:399:x: *************************************************************
  278.  * TODO:499:x: *************************************************************
  279.  */
  280. @if $m2c_mark_boundary == 1@
  281. /** END header generated by $RCSfile$ $Revision: 14170 $ */
  282. @end@
  283. @include generic-header-bottom.m2i@
  284. /** @} */
  285. ######################################################################
  286. ## Do the .c file
  287. ######################################################################
  288. @eval $m2c_processing_type = 'c'@
  289. @open ${name}.c@
  290. /*
  291.  * Note: this file originally auto-generated by mib2c using
  292.  *       version $Revision: 14170 $ of $RCSfile$ 
  293.  *
  294.  * $$hack:$
  295.  */
  296. /** \page MFD helper for ${name}
  297.  *
  298.  * \section intro Introduction
  299.  * Introductory text.
  300.  *
  301.  */
  302. @include generic-source-includes.m2i@
  303. #include <net-snmp/agent/mib_modules.h>
  304.  
  305. @if $m2c_mark_boundary == 1@
  306. /** START code generated by $RCSfile$ $Revision: 14170 $ */
  307. @end@
  308. #include "${name}_interface.h"
  309.  
  310. @foreach $table table@
  311. @    include m2c_setup_table.m2i@
  312. oid ${context}_oid[] = { $context.uc_OID };
  313. int ${context}_oid_size = OID_LENGTH(${context}_oid);
  314.  
  315. @    if "x$m2c_context_reg" ne "x"@
  316.     ${context}_registration  ${context}_user_context;
  317. @    end@
  318.  
  319. void initialize_table_$context(void);
  320. void shutdown_table_$context(void);
  321.  
  322. @end@
  323.  
  324. /**
  325.  * Initializes the $name module
  326.  */
  327. void
  328. init_$name(void)
  329. {
  330.     DEBUGMSGTL(("verbose:$name:init_$name","called\n"));
  331.  
  332.     /*
  333.      * TODO:300:o: Perform $name one-time module initialization.
  334.      */
  335.      
  336.     /*
  337.      * here we initialize all the tables we're planning on supporting
  338.      */
  339.   @foreach $table table@
  340.     if (should_init("$context"))
  341.         initialize_table_$context();
  342.  
  343.   @end@
  344. } /* init_$name */
  345.  
  346. /**
  347.  * Shut-down the $name module (agent is exiting)
  348.  */
  349. void
  350. shutdown_$name(void)
  351. {
  352.   @foreach $table table@
  353.     if (should_init("$context"))
  354.         shutdown_table_$context();
  355.  
  356.   @end@
  357. }
  358.  
  359. ########################################################################
  360. ##
  361. @foreach $table table@
  362. @    include m2c_setup_table.m2i@
  363. /**
  364.  * Initialize the table $context 
  365.  *    (Define its contents and how it's structured)
  366.  */
  367. void
  368. initialize_table_$context(void)
  369. {
  370.     ${context}_registration * user_context;
  371.     u_long flags;
  372.  
  373.     DEBUGMSGTL(("verbose:$context:initialize_table_$context","called\n"));
  374.  
  375.     /*
  376.      * TODO:301:o: Perform $context one-time table initialization.
  377.      */
  378.  
  379.     /*
  380.      * TODO:302:o: |->Initialize $context user context
  381.      * if you'd like to pass in a pointer to some data for this
  382.      * table, allocate or set it up here.
  383.      */
  384. @    if "$m2c_context_reg" eq "netsnmp_data_list"@
  385.     /*
  386.      * a netsnmp_data_list is a simple way to store void pointers. A simple
  387.      * string token is used to add, find or remove pointers.
  388.      */
  389.     user_context = netsnmp_create_data_list("$context", NULL, NULL);
  390. @    else@
  391.     user_context = &${context}_user_context;
  392. @   end@
  393.     
  394.     /*
  395.      * No support for any flags yet, but in the future you would
  396.      * set any flags here.
  397.      */
  398.     flags = 0;
  399.     
  400.     /*
  401.      * call interface initialization code
  402.      */
  403.     _${context}_initialize_interface(user_context, flags);
  404. } /* initialize_table_$context */
  405.  
  406. /**
  407.  * Shutdown the table $context 
  408.  */
  409. void
  410. shutdown_table_$context(void)
  411. {
  412.     /*
  413.      * call interface shutdown code
  414.      */
  415.     _${context}_shutdown_interface(&${context}_user_context);
  416. }
  417.  
  418. ########################################################################
  419. @   if $m2c_data_init == 1@
  420. /**
  421.  * extra context initialization (eg default values)
  422.  *
  423.  * @param rowreq_ctx    : row request context
  424.  * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
  425.  *
  426.  * @retval MFD_SUCCESS  : no errors
  427.  * @retval MFD_ERROR    : error (context allocate will fail)
  428.  */
  429. int
  430. ${context}_rowreq_ctx_init(${context}_rowreq_ctx *rowreq_ctx,
  431.                            void *user_init_ctx)
  432. {
  433.     DEBUGMSGTL(("verbose:$context:${context}_rowreq_ctx_init","called\n"));
  434.  
  435.     netsnmp_assert(NULL != rowreq_ctx);
  436.     
  437.     /*
  438.      * TODO:210:o: |-> Perform extra $context rowreq initialization. (eg DEFVALS)
  439.      */
  440. @   foreach $node nonindex@
  441. @      include m2c_setup_node.m2i@
  442. @      if $node.hasdefval == 0@
  443. @         next@
  444. @      end@
  445. ##------------------------------------------------------
  446. @      if $node.needlength == 1@
  447.     /*
  448.      * strings and oids are hard to handle automagically.
  449.      * so all we've got for you is a hint:
  450.      *
  451.      * memcpy($m2c_data_item$node, $node.defval,
  452.      *        len($node.defval) * sizeof($m2c_data_itme$node[0]);
  453.      */
  454. @      elsif $node.enums == 1@
  455. @         if "$node.perltype" ne "BITS"@
  456. @            eval $m2c_tmp_mt = $node.defval@
  457. @            foreach $e $v enum@
  458. @               include m2c_setup_enum.m2i@
  459. @               if $e eq $node.defval@
  460. @                  eval $m2c_tmp_mt = $m2c_ename@
  461. @               end@
  462. @            end@ # for each
  463. @         end@ # ! bits
  464.     $m2c_data_item$node = $m2c_tmp_mt;
  465. @      elsif ("$node.decl" eq "long") || ("$node.decl" eq "u_long")@
  466.     $m2c_data_item$node = $node.defval;
  467. @      else@
  468.     /** $m2c_data_item$node = $node.defval; */
  469. @      end@
  470.     
  471. @   end@ foreach nonindex
  472.  
  473.     return MFD_SUCCESS;
  474. } /* ${context}_rowreq_ctx_init */
  475.  
  476. /**
  477.  * extra context cleanup
  478.  *
  479.  */
  480. void ${context}_rowreq_ctx_cleanup(${context}_rowreq_ctx *rowreq_ctx)
  481. {
  482.     DEBUGMSGTL(("verbose:$context:${context}_rowreq_ctx_cleanup","called\n"));
  483.  
  484.     netsnmp_assert(NULL != rowreq_ctx);
  485.     
  486.     /*
  487.      * TODO:211:o: |-> Perform extra $context rowreq cleanup.
  488.      */
  489. } /* ${context}_rowreq_ctx_cleanup */
  490.  
  491. @   end@ // data_init
  492. ########################################################################
  493. @if $m2c_table_persistent == 1@
  494. @   include mfd-persistence.m2i@
  495. @end@
  496. ########################################################################
  497. /**
  498.  * pre-request callback
  499.  *
  500.  *
  501.  * @retval MFD_SUCCESS              : success.
  502.  * @retval MFD_ERROR                : other error
  503.  */
  504. int
  505. ${context}_pre_request(${context}_registration * user_context)
  506. {
  507.     DEBUGMSGTL(("verbose:${context}:${context}_pre_request","called\n"));
  508.  
  509.     /*
  510.      * TODO:510:o: Perform $context pre-request actions.
  511.      */
  512.  
  513.     return MFD_SUCCESS;
  514. } /* ${context}_pre_request */
  515.  
  516. /**
  517.  * post-request callback
  518.  *
  519.  * Note:
  520.  *   New rows have been inserted into the container, and
  521.  *   deleted rows have been removed from the container and
  522.  *   released.
  523.  *
  524.  * @param user_context
  525.  * @param rc : MFD_SUCCESS if all requests succeeded
  526.  *
  527.  * @retval MFD_SUCCESS : success.
  528.  * @retval MFD_ERROR   : other error (ignored)
  529.  */
  530. int
  531. ${context}_post_request(${context}_registration * user_context, int rc)
  532. {
  533.     DEBUGMSGTL(("verbose:${context}:${context}_post_request","called\n"));
  534.  
  535.     /*
  536.      * TODO:511:o: Perform $context post-request actions.
  537.      */
  538.  
  539. @  if $m2c_table_settable@
  540.     /*
  541.      * check to set if any rows were changed.
  542.      */
  543.     if (${context}_dirty_get()) {
  544.         /*
  545.          * check if request was successful. If so, this would be
  546.          * a good place to save data to its persistent store.
  547.          */
  548.         if (MFD_SUCCESS == rc) {
  549.             /*
  550.              * save changed rows, if you haven't already
  551.              */
  552. @     if $m2c_table_persistent@
  553.             snmp_store(netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
  554.                                              NETSNMP_DS_LIB_APPTYPE));
  555. @     end@
  556.         }
  557.         
  558.         ${context}_dirty_set(0); /* clear table dirty flag */
  559.     }
  560.  
  561. @   end@
  562.     return MFD_SUCCESS;
  563. } /* ${context}_post_request */
  564.  
  565. @end@ // table
  566.  
  567. ########################################################################
  568. @if $m2c_create_fewer_files == 1@
  569. @   eval $mfd_processing_types = "c"@
  570. @   include mfd-data-get.m2c@
  571. @   include mfd-data-set.m2c@
  572. @else@
  573. @   eval $mfd_processing_types = "chi"@
  574. @   run mfd-data-get.m2c@
  575. @   run mfd-data-set.m2c@
  576. @end@
  577. ########################################################################
  578. /** @{ */
  579. @if $m2c_mark_boundary == 1@
  580. /** END code generated by $RCSfile$ $Revision: 14170 $ */
  581. @end@
  582. ##
  583. ########################################################################
  584. ##
  585. ## Do support files
  586. ##
  587. ########################################################################
  588. @run generic-table-constants.m2c@
  589. @run mfd-interface.m2c@
  590. @run mfd-data-access.m2c@
  591. ##
  592. @run mfd-readme.m2c@
  593. ##
  594. @if $mfd_generate_doxygen == 1@
  595. @   run mfd-doxygen.m2c@
  596. @end@
  597. ##
  598. @if $mfd_generate_makefile == 1@
  599. @   run mfd-makefile.m2m@
  600. @end@
  601. ##
  602. @if $mfd_generate_subagent == 1@
  603. @   run subagent.m2c@
  604. @end@
  605. ##
  606.